# 导入基础中间件类
from starlette.middleware.base import BaseHTTPMiddleware

# 导入时间模块
import time


# 定义计时中间件类
class TimingMiddleware(BaseHTTPMiddleware):
    # 实现 dispatch 方法来处理请求
    async def dispatch(self, request, call_next):
        # 记录请求开始时间
        start_time = time.time()
        # 调用下一个中间件或路由处理函数
        response = await call_next(request)
        # 计算处理时间
        process_time = time.time() - start_time
        # 在响应头中添加处理时间
        response.headers["X-Process-Time"] = str(process_time)
        # 返回响应
        return response


# 定义主函数
def main():
    # 导入必要的模块
    from starlette.applications import Starlette
    from starlette.routing import Route
    from starlette.responses import PlainTextResponse
    import uvicorn

    # 定义简单的处理函数
    async def homepage(request):
        return PlainTextResponse("Hello, World!")

    # 创建应用实例
    app = Starlette(routes=[Route("/", homepage)])
    # 添加自定义中间件
    app.add_middleware(TimingMiddleware)
    # 启动服务器
    uvicorn.run(app, host="127.0.0.1", port=8000)


# 脚本入口
if __name__ == "__main__":
    main()
